<?php
namespace App\Http\Controllers;

use App\Model\Provider;
use App\Model\UserSmbms2;

class lianbiaoController extends Controller{

    // 一对一
    public function hasOne(){

         $user=UserSmbms2::find(1);
        //  得到关联模型对象，在获取第一条数据
        // dd($user->addressInfo()->first());
        // 利用laravel模型自带的魔术方法调用
        //  dd($user->addressInfo);
        dd(UserSmbms2::find(1)->addressInfo->toArray());
        //  使用模型对象的with()方法调用模型中使用到连表查询的方法
        $userWith=UserSmbms2::with("addressInfo")
        ->where("id",1)->first();
        // dd($userWith);
        // dd($userWith->addressInfo->body);-------

    }
    // 一对多
    public function hasMany(){
        
        // 查询供应商id为1之下全部的商品
        // where()只返回该供应商下所有商品中id大于11的商品
        $providerBills=Provider::find(1)->bills->where("id",">",11);
        dd($providerBills->toArray());

        // 使用关联查询
        // 为了防止N+1的问题，需要使用到with函数来解决
        //使用with相当于使用了关联查询类似mybatis
        $providerBills2=Provider::with(["bills"=>function($query){
            // 写出关联查询时的条件
            // $query->where("id",">","11");
        }])->find(14);
        // dd($providerBills2->toArray());

    }

    // 多对多
    public function beLongsToMany(){

        // 直接查询id为1的拥有什么权限
        // dd(UserSmbms2::find(1)->auths->toarray());

        // 使用with函数完成关联查询
        $userAuths=UserSmbms2::with(["auths"=>function($query){
            // 写出关联查询时的条件
            //....
        }])->find(1);
        dd($userAuths->toarray());
    }
}